package com.lu.pojo.reflection;

/**
 * @author luzhenfang
 * @date 2020 05 25
 * @description
 * 反射机制:在程序执行期借助 Reflection API 获得任何类的内部信息，能直接操作人员对象的内部属性及方法
 */
public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        // 一个类在内存中只有一个class 对象
        // 一个类被加载后，类的整个结构都被封装在
        // 通过反射获取 class 对象
        Class c1 = Class.forName("com.lu.pojo.reflection.User");
        Class c2 = Class.forName("com.lu.pojo.reflection.User");
        Class c3 = Class.forName("com.lu.pojo.reflection.User");
        System.out.println(c1.hashCode());
        System.out.println(c1.hashCode());
        System.out.println(c1.hashCode());
        /**
         * Class类：包含特定结构
         * - 本身是一个类
         * - 只能由系统建立
         * - 一个加载的类在 JVM 中只会有一个 class 实例
         * - 一个class对象对应的是加载到JVM中的一个.class文件
         * - 每个类的实例都会记得自己是由哪个Class 实例所生成
         * - 通过 Class 可以完整的得到一个类中所有被加载的结构
         * - Class 类是 Reflection 的根源 针对任何你想动态加载 运行的类 唯有 先获得相应的 Class 对象
         */
    }
}
// 实体类
class User{
    private String name;
    private int id;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }
}